#pragma once
#include <iostream>

namespace lw
{
	struct true_type
	{
		constexpr static bool value = true;
	};

	struct false_type
	{
		constexpr static bool value = false;
	};

	template<class T>
	struct is_void : public false_type
	{};

	template<>
	struct is_void<void> : public true_type
	{};
	template<>
	struct is_void<const void> : public true_type
	{};
	template<>
	struct is_void<volatile void> : public true_type
	{};
	template<>
	struct is_void<const volatile void> : public true_type
	{};

	template<class T>
	constexpr bool is_void_v = is_void<T>::value;
}